<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>1282. 用户分组</title>
  </head>
  <body>
    <script>
      //     有 n 个人被分成数量未知的组。每个人都被标记为一个从 0 到 n - 1 的唯一ID 。

      // 给定一个整数数组 groupSizes ，其中 groupSizes[i] 是第 i 个人所在的组的大小。例如，如果 groupSizes[1] = 3 ，则第 1 个人必须位于大小为 3 的组中。

      // 返回一个组列表，使每个人 i 都在一个大小为 groupSizes[i] 的组中。

      // 每个人应该 恰好只 出现在 一个组 中，并且每个人必须在一个组中。如果有多个答案，返回其中 任何 一个。可以 保证 给定输入 至少有一个 有效的解。

      //

      // 示例 1：

      // 输入：groupSizes = [3,3,3,3,3,1,3]
      // 输出：[[5],[0,1,2],[3,4,6]]
      // 解释：
      // 第一组是 [5]，大小为 1，groupSizes[5] = 1。
      // 第二组是 [0,1,2]，大小为 3，groupSizes[0] = groupSizes[1] = groupSizes[2] = 3。
      // 第三组是 [3,4,6]，大小为 3，groupSizes[3] = groupSizes[4] = groupSizes[6] = 3。
      // 其他可能的解决方案有 [[2,1,6],[5],[0,4,3]] 和 [[5],[0,6,2],[4,3,1]]。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/group-the-people-given-the-group-size-they-belong-to
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {number[]} groupSizes
       * @return {number[][]}
       */
      var groupThePeople = function (groupSizes) {
        let mapObj = new Map()
        for (let i = 0; i < groupSizes.length; i++) {
          if (mapObj.get(groupSizes[i])) {
            const arr = mapObj.get(groupSizes[i])
            arr.push(i)
            mapObj.set(groupSizes[i], arr)
          } else {
            const arr = []
            arr.push(i)
            mapObj.set(groupSizes[i], arr)
          }
        }
        const res = []
        debugger
        for (let [key, val] of mapObj) {
          console.log(key)
          if (Number(key) === val.length) {
            res.push(val)
          } else {
            const len = val.length
            let i = 0
            let j = Number(key)
            while (j <= len) {
              const arr = val.slice(i, j)
              res.push(arr)
              i = j
              j += Number(key)
            }
          }
        }
        return res
      }

      console.log(groupThePeople([2, 2, 1, 1, 1, 1, 1, 1]))
    </script>
  </body>
</html>
